<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// Promise的静态方法

// Promise.all()将多个promise对象包装成一个新的promsie对象
// all方法接收一个数组,数组中通常是多个promise对象
// all方法执行后返回一个新的promise对象

let p1 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        console.log( '任务1' );
        resolve('成功1');
    },1234)
})

let p2 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        console.log( '任务2' );
        resolve('成功2');
    },2234)
})

let p3 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        console.log( '任务3' );
        resolve('成功3');
        // reject('失败3');
    },834)
})

// console.log( '任务4' );

// 需求: 等待三个异步任务都完成之后,再执行任务4
// p4的状态和结果:
// 如果 p1 p2 p3 都成功,则p4成功,结果为p1 p2 p3成功的结果(数组)
// 如果 p1 p2 p3 任意一个失败,则p4跟随失败的promise对象的状态和结果(多个失败的话结果还是为第一个失败的结果，因为状态只能改变一次)
 let p4 = Promise.all([p1,p2,p3]);
 p4.then(
    (res)=>{
        console.log( 'p4成功',res );// p4成功 , ['成功1', '成功2', '成功3']
        console.log( '任务4' );
    },
    (res)=>{
        console.log( 'p4失败',res );// p4失败 , 失败3
    }
 )

</script>
</body>
</html>